SOLID கோட்பாடுகள், பொருள் சார்ந்த வடிவமைப்பு, பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய மென்பொருளை உருவாக்குவதற்கான வழிகாட்டி. ஒவ்வொரு கோட்பாடும் எடுத்துக்காட்டுகளுடன் விளக்கப்பட்டுள்ளது.
SOLID கோட்பாடுகள்: வலுவான மென்பொருளுக்கான பொருள் சார்ந்த வடிவமைப்பு வழிகாட்டுதல்கள்
மென்பொருள் மேம்பாட்டு உலகில், வலுவான, பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய பயன்பாடுகளை உருவாக்குவது மிக முக்கியம். பொருள் சார்ந்த நிரலாக்கம் (OOP) இந்த இலக்குகளை அடைய ஒரு சக்திவாய்ந்த முன்மாதிரியை வழங்குகிறது, ஆனால் சிக்கலான மற்றும் உடையக்கூடிய அமைப்புகளை உருவாக்குவதைத் தவிர்க்க நிறுவப்பட்ட கோட்பாடுகளைப் பின்பற்றுவது முக்கியம். SOLID கோட்பாடுகள், ஐந்து அடிப்படை வழிகாட்டுதல்களின் தொகுப்பு, புரிந்துகொள்ள எளிதான, சோதிக்க மற்றும் மாற்றியமைக்கக்கூடிய மென்பொருளை வடிவமைப்பதற்கான ஒரு வரைபடத்தை வழங்குகிறது. இந்த விரிவான வழிகாட்டி ஒவ்வொரு கோட்பாட்டையும் விரிவாக ஆராய்ந்து, சிறந்த மென்பொருளை உருவாக்க உதவும் நடைமுறை எடுத்துக்காட்டுகள் மற்றும் நுண்ணறிவுகளை வழங்குகிறது.
SOLID கோட்பாடுகள் என்றால் என்ன?
SOLID கோட்பாடுகள் ராபர்ட் சி. மார்ட்டின் ("அங்கிள் பாப்" என்றும் அழைக்கப்படுபவர்) அவர்களால் அறிமுகப்படுத்தப்பட்டது மற்றும் பொருள் சார்ந்த வடிவமைப்பின் ஒரு மூலக்கல்லாகும். அவை கடுமையான விதிகள் அல்ல, மாறாக டெவலப்பர்கள் அதிக பராமரிக்கக்கூடிய மற்றும் நெகிழ்வான குறியீட்டை உருவாக்க உதவும் வழிகாட்டுதல்கள். SOLID என்ற சுருக்கெழுத்து குறிப்பது:
- S - ஒற்றைப் பொறுப்பு கோட்பாடு
- O - திறந்த/மூடிய கோட்பாடு
- L - லிஸ்கோவ் மாற்று கோட்பாடு
- I - இடைமுகம் பிரிப்பு கோட்பாடு
- D - சார்பு தலைகீழ் கோட்பாடு
ஒவ்வொரு கோட்பாட்டையும் ஆராய்ந்து, அவை சிறந்த மென்பொருள் வடிவமைப்பிற்கு எவ்வாறு பங்களிக்கின்றன என்பதைப் பார்ப்போம்.
1. ஒற்றைப் பொறுப்பு கோட்பாடு (SRP)
வரையறை
ஒற்றைப் பொறுப்பு கோட்பாடு ஒரு கிளாஸ் மாறுவதற்கு ஒரே ஒரு காரணம் மட்டுமே இருக்க வேண்டும் என்று கூறுகிறது. வேறு வார்த்தைகளில் கூறுவதானால், ஒரு கிளாஸிற்கு ஒரே ஒரு வேலை அல்லது பொறுப்பு மட்டுமே இருக்க வேண்டும். ஒரு கிளாஸிற்கு பல பொறுப்புகள் இருந்தால், அது இறுக்கமாகப் பிணைக்கப்பட்டு, பராமரிக்க கடினமாகிவிடும். ஒரு பொறுப்பில் ஏற்படும் எந்த மாற்றமும் தற்செயலாக கிளாஸின் மற்ற பகுதிகளைப் பாதிக்கலாம், இது எதிர்பாராத பிழைகள் மற்றும் அதிகரித்த சிக்கலுக்கு வழிவகுக்கும்.
விளக்கம் மற்றும் நன்மைகள்
SRP ஐப் பின்பற்றுவதன் முதன்மை நன்மை, அதிகரித்த தொகுதித்தன்மை மற்றும் பராமரிப்புத்தன்மை ஆகும். ஒரு கிளாஸ் ஒற்றைப் பொறுப்பைக் கொண்டிருக்கும்போது, அதைப் புரிந்துகொள்வது, சோதிப்பது மற்றும் மாற்றியமைப்பது எளிது. மாற்றங்கள் எதிர்பாராத விளைவுகளை ஏற்படுத்த வாய்ப்பில்லை, மேலும் தேவையற்ற சார்புகளை அறிமுகப்படுத்தாமல் கிளாஸ் பயன்பாட்டின் மற்ற பகுதிகளில் மீண்டும் பயன்படுத்தப்படலாம். இது சிறந்த குறியீட்டு அமைப்பையும் ஊக்குவிக்கிறது, ஏனெனில் கிளாஸ்கள் குறிப்பிட்ட பணிகளில் கவனம் செலுத்துகின்றன.
எடுத்துக்காட்டு
பயனர் அங்கீகாரம் மற்றும் பயனர் சுயவிவர மேலாண்மை ஆகிய இரண்டையும் கையாளும் `User` என்ற கிளாஸைக் கவனியுங்கள். இந்த கிளாஸ் SRP ஐ மீறுகிறது, ஏனெனில் இதற்கு இரண்டு தனித்தனி பொறுப்புகள் உள்ளன.
SRP ஐ மீறுதல் (எடுத்துக்காட்டு)
```java public class User { public void authenticate(String username, String password) { // அங்கீகார தர்க்கம் } public void changePassword(String oldPassword, String newPassword) { // கடவுச்சொல் மாற்ற தர்க்கம் } public void updateProfile(String name, String email) { // சுயவிவர புதுப்பிப்பு தர்க்கம் } } ```SRP ஐப் பின்பற்ற, இந்த பொறுப்புகளை வெவ்வேறு கிளாஸ்களாகப் பிரிக்கலாம்:
SRP ஐப் பின்பற்றுதல் (எடுத்துக்காட்டு)இந்த திருத்தப்பட்ட வடிவமைப்பில், `UserAuthenticator` பயனர் அங்கீகாரத்தைக் கையாள்கிறது, அதே நேரத்தில் `UserProfileManager` பயனர் சுயவிவர நிர்வாகத்தைக் கையாள்கிறது. ஒவ்வொரு கிளாஸிற்கும் ஒரு ஒற்றைப் பொறுப்பு உள்ளது, இது குறியீட்டை அதிக தொகுதித்தன்மை உடையதாகவும், பராமரிக்க எளிதாகவும் ஆக்குகிறது.
நடைமுறை ஆலோசனை
- ஒரு கிளாஸின் வெவ்வேறு பொறுப்புகளை அடையாளம் காணவும்.
- இந்த பொறுப்புகளை வெவ்வேறு கிளாஸ்களாகப் பிரிக்கவும்.
- ஒவ்வொரு கிளாஸிற்கும் ஒரு தெளிவான மற்றும் நன்கு வரையறுக்கப்பட்ட நோக்கம் இருப்பதை உறுதிப்படுத்தவும்.
2. திறந்த/மூடிய கோட்பாடு (OCP)
வரையறை
திறந்த/மூடிய கோட்பாடு மென்பொருள் கூறுகள் (கிளாஸ்கள், தொகுதிகள், செயல்பாடுகள் போன்றவை) விரிவாக்கத்திற்காக திறந்திருக்க வேண்டும், ஆனால் மாற்றத்திற்காக மூடப்பட்டிருக்க வேண்டும் என்று கூறுகிறது. இதன் பொருள், ஏற்கனவே உள்ள குறியீட்டை மாற்றாமல் ஒரு சிஸ்டத்திற்கு புதிய செயல்பாடுகளைச் சேர்க்க உங்களுக்கு முடிய வேண்டும்.
விளக்கம் மற்றும் நன்மைகள்
OCP பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய மென்பொருளை உருவாக்குவதற்கு முக்கியமானது. புதிய அம்சங்கள் அல்லது நடத்தைகளைச் சேர்க்க வேண்டியிருக்கும்போது, ஏற்கனவே சரியாக வேலை செய்யும் குறியீட்டை மாற்றியமைக்க வேண்டிய அவசியம் இல்லை. ஏற்கனவே உள்ள குறியீட்டை மாற்றுவது பிழைகளை அறிமுகப்படுத்தும் மற்றும் ஏற்கனவே உள்ள செயல்பாட்டை உடைக்கும் அபாயத்தை அதிகரிக்கிறது. OCP ஐப் பின்பற்றுவதன் மூலம், ஒரு சிஸ்டத்தின் செயல்பாட்டை அதன் நிலைத்தன்மையைப் பாதிக்காமல் விரிவாக்கலாம்.
எடுத்துக்காட்டு
பல்வேறு வடிவங்களின் பரப்பளவைக் கணக்கிடும் `AreaCalculator` என்ற கிளாஸைக் கவனியுங்கள். ஆரம்பத்தில், இது செவ்வகங்களின் பரப்பளவைக் கணக்கிடுவதற்கு மட்டுமே ஆதரவளிக்கக்கூடும்.
OCP ஐ மீறுதல் (எடுத்துக்காட்டு)வட்டங்களின் பரப்பளவைக் கணக்கிடுவதற்கு ஆதரவைச் சேர்க்க விரும்பினால், `AreaCalculator` கிளாஸை மாற்றியமைக்க வேண்டும், இது OCP ஐ மீறுகிறது.
OCP ஐப் பின்பற்ற, அனைத்து வடிவங்களுக்கும் ஒரு பொதுவான `area()` முறையை வரையறுக்க ஒரு இடைமுகம் அல்லது ஒரு சுருக்கமான கிளாஸைப் பயன்படுத்தலாம்.
OCP ஐப் பின்பற்றுதல் (எடுத்துக்காட்டு)
```java interface Shape { double area(); } class Rectangle implements Shape { double width; double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } @Override public double area() { return width * height; } } class Circle implements Shape { double radius; public Circle(double radius) { this.radius = radius; } @Override public double area() { return Math.PI * radius * radius; } } public class AreaCalculator { public double calculateArea(Shape shape) { return shape.area(); } } ```இப்போது, ஒரு புதிய வடிவத்திற்கான ஆதரவைச் சேர்க்க, `AreaCalculator` கிளாஸை மாற்றியமைக்காமல், `Shape` இடைமுகத்தை செயல்படுத்தும் ஒரு புதிய கிளாஸை உருவாக்கினால் போதும்.
நடைமுறை ஆலோசனை
- பொதுவான நடத்தைகளை வரையறுக்க இடைமுகங்கள் அல்லது சுருக்கமான கிளாஸ்களைப் பயன்படுத்தவும்.
- மரபுரிமை அல்லது தொகுப்பு மூலம் விரிவாக்கக்கூடிய வகையில் உங்கள் குறியீட்டை வடிவமைக்கவும்.
- புதிய செயல்பாட்டைச் சேர்க்கும்போது ஏற்கனவே உள்ள குறியீட்டை மாற்றுவதைத் தவிர்க்கவும்.
3. லிஸ்கோவ் மாற்று கோட்பாடு (LSP)
வரையறை
லிஸ்கோவ் மாற்று கோட்பாடு துணை வகைகள் தங்கள் அடிப்படை வகைகளுக்குப் பதிலாக நிரலின் சரியான தன்மையை மாற்றாமல் மாற்றக்கூடியதாக இருக்க வேண்டும் என்று கூறுகிறது. எளிமையான சொற்களில், உங்களுக்கு ஒரு அடிப்படை கிளாஸ் மற்றும் ஒரு பெறப்பட்ட கிளாஸ் இருந்தால், எதிர்பாராத நடத்தையை ஏற்படுத்தாமல், அடிப்படை கிளாஸைப் பயன்படுத்தும் எந்த இடத்திலும் பெறப்பட்ட கிளாஸைப் பயன்படுத்த உங்களுக்கு முடிய வேண்டும்.
விளக்கம் மற்றும் நன்மைகள்
LSP மரபுரிமை சரியாகப் பயன்படுத்தப்படுவதையும், பெறப்பட்ட கிளாஸ்கள் அவற்றின் அடிப்படை கிளாஸ்களுடன் சீராக செயல்படுவதையும் உறுதி செய்கிறது. LSP ஐ மீறுவது எதிர்பாராத பிழைகளுக்கு வழிவகுக்கும் மற்றும் சிஸ்டத்தின் நடத்தையைப் பற்றி புரிந்துகொள்வதை கடினமாக்கும். LSP ஐப் பின்பற்றுவது குறியீடு மறுபயன்பாடு மற்றும் பராமரிப்புத்தன்மையை ஊக்குவிக்கிறது.
எடுத்துக்காட்டு
`fly()` என்ற முறையுடன் `Bird` என்ற ஒரு அடிப்படை கிளாஸைக் கவனியுங்கள். `Penguin` என்ற ஒரு பெறப்பட்ட கிளாஸ் `Bird` இலிருந்து மரபுரிமையாகப் பெறுகிறது. இருப்பினும், பெங்குவின்களால் பறக்க முடியாது.
LSP ஐ மீறுதல் (எடுத்துக்காட்டு)இந்த எடுத்துக்காட்டில், `Penguin` கிளாஸ் `fly()` முறையை மேலெழுதி ஒரு விதிவிலக்கை வீசுவதால் LSP ஐ மீறுகிறது. `Bird` ஆப்ஜெக்ட் எதிர்பார்க்கப்படும் இடத்தில் `Penguin` ஆப்ஜெக்ட்டைப் பயன்படுத்த முயற்சித்தால், எதிர்பாராத விதிவிலக்கு கிடைக்கும்.
LSP ஐப் பின்பற்ற, பறக்கும் பறவைகளைக் குறிக்கும் ஒரு புதிய இடைமுகம் அல்லது சுருக்கமான கிளாஸை அறிமுகப்படுத்தலாம்.
LSP ஐப் பின்பற்றுதல் (எடுத்துக்காட்டு)இப்போது, பறக்கக்கூடிய கிளாஸ்கள் மட்டுமே `FlyingBird` இடைமுகத்தை செயல்படுத்துகின்றன. `Penguin` கிளாஸ் இனி LSP ஐ மீறுவதில்லை.
நடைமுறை ஆலோசனை
- பெறப்பட்ட கிளாஸ்கள் தங்கள் அடிப்படை கிளாஸ்களுடன் சீராக செயல்படுவதை உறுதிப்படுத்தவும்.
- அடிப்படை கிளாஸ் விதிவிலக்குகளை வீசவில்லை என்றால், மேலெழுதப்பட்ட முறைகளில் விதிவிலக்குகளை வீசுவதைத் தவிர்க்கவும்.
- ஒரு பெறப்பட்ட கிளாஸ் அடிப்படை கிளாஸிலிருந்து ஒரு முறையை செயல்படுத்த முடியாவிட்டால், வேறு வடிவமைப்பைப் பயன்படுத்துவதைக் கவனியுங்கள்.
4. இடைமுகம் பிரிப்பு கோட்பாடு (ISP)
வரையறை
இடைமுகம் பிரிப்பு கோட்பாடு, கிளையண்டுகள் அவர்கள் பயன்படுத்தாத முறைகளைச் சார்ந்து இருக்க கட்டாயப்படுத்தப்படக்கூடாது என்று கூறுகிறது. வேறு வார்த்தைகளில் கூறுவதானால், ஒரு இடைமுகம் அதன் கிளையண்டுகளின் குறிப்பிட்ட தேவைகளுக்கு ஏற்ப வடிவமைக்கப்பட வேண்டும். பெரிய, ஒற்றை இடைமுகங்கள் சிறிய, மேலும் கவனம் செலுத்தும் இடைமுகங்களாகப் பிரிக்கப்பட வேண்டும்.
விளக்கம் மற்றும் நன்மைகள்
ISP கிளையண்டுகள் அவர்களுக்குத் தேவையில்லாத முறைகளைச் செயல்படுத்த கட்டாயப்படுத்தப்படுவதைத் தடுக்கிறது, பிணைப்பை குறைத்து குறியீடு பராமரிப்புத்தன்மையை மேம்படுத்துகிறது. ஒரு இடைமுகம் மிகவும் பெரியதாக இருக்கும்போது, கிளையண்டுகள் தங்கள் குறிப்பிட்ட தேவைகளுக்கு பொருத்தமற்ற முறைகளைச் சார்ந்து இருக்கிறார்கள். இது தேவையற்ற சிக்கலுக்கு வழிவகுக்கும் மற்றும் பிழைகளை அறிமுகப்படுத்தும் அபாயத்தை அதிகரிக்கும். ISP ஐப் பின்பற்றுவதன் மூலம், நீங்கள் அதிக கவனம் செலுத்தும் மற்றும் மறுபயன்பாட்டு இடைமுகங்களை உருவாக்கலாம்.
எடுத்துக்காட்டு
அச்சிடுதல், ஸ்கேன் செய்தல் மற்றும் தொலைநகல் அனுப்புதல் ஆகியவற்றுக்கான முறைகளை வரையறுக்கும் `Machine` என்ற ஒரு பெரிய இடைமுகத்தைக் கவனியுங்கள்.
ISP ஐ மீறுதல் (எடுத்துக்காட்டு)
```java interface Machine { void print(); void scan(); void fax(); } class SimplePrinter implements Machine { @Override public void print() { // அச்சிடும் தர்க்கம் } @Override public void scan() { // இந்த பிரிண்டரால் ஸ்கேன் செய்ய முடியாது, எனவே ஒரு விதிவிலக்கை வீசுகிறோம் அல்லது அதை காலியாக விடுகிறோம் throw new UnsupportedOperationException(); } @Override public void fax() { // இந்த பிரிண்டரால் தொலைநகல் அனுப்ப முடியாது, எனவே ஒரு விதிவிலக்கை வீசுகிறோம் அல்லது அதை காலியாக விடுகிறோம் throw new UnsupportedOperationException(); } } ````SimplePrinter` கிளாஸ் `print()` முறையை மட்டுமே செயல்படுத்த வேண்டும், ஆனால் அது `scan()` மற்றும் `fax()` முறைகளையும் செயல்படுத்த கட்டாயப்படுத்தப்படுகிறது, இது ISP ஐ மீறுகிறது.
ISP ஐப் பின்பற்ற, `Machine` இடைமுகத்தை சிறிய இடைமுகங்களாகப் பிரிக்கலாம்:
ISP ஐப் பின்பற்றுதல் (எடுத்துக்காட்டு)
```java interface Printer { void print(); } interface Scanner { void scan(); } interface Fax { void fax(); } class SimplePrinter implements Printer { @Override public void print() { // அச்சிடும் தர்க்கம் } } class MultiFunctionPrinter implements Printer, Scanner, Fax { @Override public void print() { // அச்சிடும் தர்க்கம் } @Override public void scan() { // ஸ்கேன் செய்யும் தர்க்கம் } @Override public void fax() { // தொலைநகல் அனுப்பும் தர்க்கம் } } ```இப்போது, `SimplePrinter` கிளாஸ் அதற்குத் தேவையான `Printer` இடைமுகத்தை மட்டுமே செயல்படுத்துகிறது. `MultiFunctionPrinter` கிளாஸ் மூன்று இடைமுகங்களையும் செயல்படுத்துகிறது, முழு செயல்பாட்டையும் வழங்குகிறது.
நடைமுறை ஆலோசனை
- பெரிய இடைமுகங்களை சிறிய, மேலும் கவனம் செலுத்தும் இடைமுகங்களாகப் பிரிக்கவும்.
- கிளையண்டுகள் அவர்களுக்குத் தேவையான முறைகளை மட்டுமே சார்ந்து இருப்பதை உறுதிப்படுத்தவும்.
- கிளையண்டுகள் தேவையற்ற முறைகளைச் செயல்படுத்த கட்டாயப்படுத்தும் ஒற்றை இடைமுகங்களை உருவாக்குவதைத் தவிர்க்கவும்.
5. சார்பு தலைகீழ் கோட்பாடு (DIP)
வரையறை
சார்பு தலைகீழ் கோட்பாடு உயர்மட்ட தொகுதிகள் கீழ்மட்ட தொகுதிகளைச் சார்ந்து இருக்கக்கூடாது என்று கூறுகிறது. இரண்டும் சுருக்கங்களைச் சார்ந்து இருக்க வேண்டும். சுருக்கங்கள் விவரங்களைச் சார்ந்து இருக்கக்கூடாது. விவரங்கள் சுருக்கங்களைச் சார்ந்து இருக்க வேண்டும்.
விளக்கம் மற்றும் நன்மைகள்
DIP தளர்வான பிணைப்பை ஊக்குவிக்கிறது மற்றும் சிஸ்டத்தை மாற்றுவதையும் சோதிப்பதையும் எளிதாக்குகிறது. உயர்மட்ட தொகுதிகள் (எ.கா., வணிக தர்க்கம்) கீழ்மட்ட தொகுதிகளை (எ.கா., தரவு அணுகல்) சார்ந்து இருக்கக்கூடாது. மாறாக, இரண்டும் சுருக்கங்களை (எ.கா., இடைமுகங்கள்) சார்ந்து இருக்க வேண்டும். இது கீழ்மட்ட தொகுதிகளின் வெவ்வேறு செயலாக்கங்களை உயர்மட்ட தொகுதிகளைப் பாதிக்காமல் எளிதாக மாற்ற உங்களை அனுமதிக்கிறது. மேலும், கீழ்மட்ட சார்புகளைப் போலி செய்யவோ அல்லது ஸ்டப் செய்யவோ முடியும் என்பதால், யூனிட் சோதனைகளை எழுதுவதையும் எளிதாக்குகிறது.
எடுத்துக்காட்டு
பயனர் தரவைச் சேமிக்க `MySQLDatabase` என்ற ஒரு குறிப்பிட்ட கிளாஸைச் சார்ந்து இருக்கும் `UserManager` என்ற கிளாஸைக் கவனியுங்கள்.
DIP ஐ மீறுதல் (எடுத்துக்காட்டு)
```java class MySQLDatabase { public void saveUser(String username, String password) { // பயனர் தரவை MySQL தரவுத்தளத்தில் சேமிக்கவும் } } class UserManager { private MySQLDatabase database; public UserManager() { this.database = new MySQLDatabase(); } public void createUser(String username, String password) { // பயனர் தரவை சரிபார்க்கவும் database.saveUser(username, password); } } ```இந்த எடுத்துக்காட்டில், `UserManager` கிளாஸ் `MySQLDatabase` கிளாஸுடன் இறுக்கமாக பிணைக்கப்பட்டுள்ளது. வேறு தரவுத்தளத்திற்கு (எ.கா., PostgreSQL) மாற விரும்பினால், `UserManager` கிளாஸை மாற்றியமைக்க வேண்டும், இது DIP ஐ மீறுகிறது.
DIP ஐப் பின்பற்ற, `saveUser()` முறையை வரையறுக்கும் `Database` என்ற ஒரு இடைமுகத்தை அறிமுகப்படுத்தலாம். `UserManager` கிளாஸ் பின்னர் குறிப்பிட்ட `MySQLDatabase` கிளாஸை விட `Database` இடைமுகத்தைச் சார்ந்து இருக்கும்.
DIP ஐப் பின்பற்றுதல் (எடுத்துக்காட்டு)
```java interface Database { void saveUser(String username, String password); } class MySQLDatabase implements Database { @Override public void saveUser(String username, String password) { // பயனர் தரவை MySQL தரவுத்தளத்தில் சேமிக்கவும் } } class PostgreSQLDatabase implements Database { @Override public void saveUser(String username, String password) { // பயனர் தரவை PostgreSQL தரவுத்தளத்தில் சேமிக்கவும் } } class UserManager { private Database database; public UserManager(Database database) { this.database = database; } public void createUser(String username, String password) { // பயனர் தரவை சரிபார்க்கவும் database.saveUser(username, password); } } ```இப்போது, `UserManager` கிளாஸ் `Database` இடைமுகத்தைச் சார்ந்துள்ளது, மேலும் `UserManager` கிளாஸை மாற்றியமைக்காமல் வெவ்வேறு தரவுத்தள செயலாக்கங்களுக்கு இடையில் எளிதாக மாறலாம். இதை சார்பு ஊசி மூலம் அடையலாம்.
நடைமுறை ஆலோசனை
- குறிப்பிட்ட செயலாக்கங்களை விட சுருக்கங்களைச் சார்ந்து இருக்கவும்.
- கிளாஸ்களுக்கு சார்புகளை வழங்க சார்பு ஊசியைப் பயன்படுத்தவும்.
- உயர்மட்ட தொகுதிகளில் கீழ்மட்ட தொகுதிகளின் சார்புகளை உருவாக்குவதைத் தவிர்க்கவும்.
SOLID கோட்பாடுகளைப் பயன்படுத்துவதன் நன்மைகள்
SOLID கோட்பாடுகளைப் பின்பற்றுவது பல நன்மைகளை வழங்குகிறது, அவற்றுள்:
- அதிகரித்த பராமரிப்புத்தன்மை: SOLID குறியீடு புரிந்துகொள்ளவும் மாற்றியமைக்கவும் எளிதானது, பிழைகளை அறிமுகப்படுத்தும் அபாயத்தைக் குறைக்கிறது.
- மேம்படுத்தப்பட்ட மறுபயன்பாடு: SOLID குறியீடு அதிக தொகுதித்தன்மை உடையது மற்றும் பயன்பாட்டின் மற்ற பகுதிகளில் மீண்டும் பயன்படுத்தப்படலாம்.
- மேம்படுத்தப்பட்ட சோதனைத்தன்மை: SOLID குறியீடு சோதிப்பதற்கு எளிதானது, ஏனெனில் சார்புகளை எளிதாகப் போலி செய்யவோ அல்லது ஸ்டப் செய்யவோ முடியும்.
- குறைந்த பிணைப்பு: SOLID கோட்பாடுகள் தளர்வான பிணைப்பை ஊக்குவிக்கின்றன, சிஸ்டத்தை அதிக நெகிழ்வுத்தன்மை உடையதாகவும் மாற்றத்திற்கு இணக்கமானதாகவும் ஆக்குகின்றன.
- அதிகரித்த அளவிடக்கூடிய தன்மை: SOLID குறியீடு விரிவாக்கக்கூடிய வகையில் வடிவமைக்கப்பட்டுள்ளது, சிஸ்டம் வளரவும் மாறிவரும் தேவைகளுக்கு ஏற்ப மாற்றியமைக்கப்படவும் அனுமதிக்கிறது.
முடிவுரை
SOLID கோட்பாடுகள் வலுவான, பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய பொருள் சார்ந்த மென்பொருளை உருவாக்குவதற்கான அத்தியாவசிய வழிகாட்டுதல்கள். இந்த கோட்பாடுகளைப் புரிந்துகொண்டு பயன்படுத்துவதன் மூலம், டெவலப்பர்கள் புரிந்துகொள்ள, சோதிக்க மற்றும் மாற்றியமைக்க எளிதான சிஸ்டங்களை உருவாக்க முடியும். அவை ஆரம்பத்தில் சிக்கலாகத் தோன்றினாலும், SOLID கோட்பாடுகளைப் பின்பற்றுவதன் நன்மைகள் ஆரம்ப கற்றல் வளைவை விட மிக அதிகம். உங்கள் மென்பொருள் மேம்பாட்டு செயல்முறைகளில் இந்த கோட்பாடுகளைப் பின்பற்றுங்கள், மேலும் சிறந்த மென்பொருளை உருவாக்குவதற்கான உங்கள் வழியில் நீங்கள் நன்றாக இருப்பீர்கள்.
நினைவில் கொள்ளுங்கள், இவை வழிகாட்டுதல்கள், கடுமையான விதிகள் அல்ல. சூழல் முக்கியமானது, மேலும் சில சமயங்களில் ஒரு கொள்கையை சற்று வளைப்பது ஒரு நடைமுறை தீர்வுக்காக அவசியமாகிறது. இருப்பினும், SOLID கோட்பாடுகளைப் புரிந்துகொண்டு பயன்படுத்துவதற்கு முயற்சிப்பது உங்கள் மென்பொருள் வடிவமைப்பு திறன்களையும் உங்கள் குறியீட்டின் தரத்தையும் சந்தேகத்திற்கு இடமின்றி மேம்படுத்தும்.